#include<iostream>
using namespace std;
#include<vector>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include <cstdio>
#include<functional>
#include"task.h"
typedef function<void()> task_t;

    void LoadTask(vector<task_t> &tasks)
    {
      tasks.push_back(PrintLog);
      tasks.push_back(Download);
      tasks.push_back(Backup);

    }





    int main()//非阻塞时期父进程
    {
       std::vector<task_t> tasks;
        LoadTask(tasks);

        pid_t id = fork();
        if(id == 0)
        {
            // child
            while(true)
            {
                printf("我是子进程, pid : %d\n", getpid());
                sleep(1);
            }
            exit(0);
        }

        // father
        while(true)
        {
            sleep(1);
            pid_t rid = waitpid(id, nullptr, WNOHANG);
            if(rid > 0)
        {
            printf("等待子进程%d 成功\n", rid);
            break;
        }
        else if(rid < 0)
        {
            printf("等待子进程失败\n");
            break;
        }
        else
        {
            printf("子进程尚未退出\n");

            // 做自己的事情
            for(auto &task : tasks)
            {
                task();
            }
        }
    }

}







//
//enum {
//  OK=0,
//  OPEN_FILE_ERROR,
//};
//vector<int>data;
//int SaveBegin()
//{
//  string name=to_string(time(nullptr));// 参数是char
//  name+=".backup";
//  FILE*fp=fopen(name.c_str(),"w");//参数是char
//  if(fp==nullptr)return OPEN_FILE_ERROR;
//  string dataStr;
//  for(auto d:data)
//  {
//    dataStr+=to_string(d);
//    dataStr+=" ";
//  }
//  fputs(dataStr.c_str(),fp);
//  fclose(fp);
//  return OK;
//}
//
//
//
//
//int Save()
//{
//
//  pid_t id =fork();
//  if(id==0)
//  {
//    int code=SaveBegin();
//    exit(code);
//  }
//  int status=0;
//  pid_t rid=waitpid(id,&status,0);
//  if(rid>0)
//  {
//    int code=WEXITSTATUS(status);
//    if(code==0)printf("备份成功,code :%d",code);
//    else printf("备份失败 code:%d",code);
//
//  }
//
//}
//int main()
//{
//  int cnt=1;
//  while(true)
//  {
//    data.push_back(cnt++);
//    sleep(1);
//    if(cnt%10==0)
//    {
//      Save();
//    }
//
// }
//
//
//  return 0;
//}
